package com.funsport.service;

import java.time.LocalDate;
import java.util.Map;

/**
 * 数据统计 Service接口
 */
public interface IStatisticsService {

    /**
     * 获取平台总体统计数据
     *
     * @return 统计数据
     */
    Map<String, Object> getPlatformStatistics();

    /**
     * 获取用户统计数据
     *
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 用户统计
     */
    Map<String, Object> getUserStatistics(LocalDate startDate, LocalDate endDate);

    /**
     * 获取俱乐部统计数据
     *
     * @param clubId 俱乐部ID（可选，为null时返回所有俱乐部统计）
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 俱乐部统计
     */
    Map<String, Object> getClubStatistics(Long clubId, LocalDate startDate, LocalDate endDate);

    /**
     * 获取活动统计数据
     *
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 活动统计
     */
    Map<String, Object> getEventStatistics(LocalDate startDate, LocalDate endDate);

    /**
     * 获取场地统计数据
     *
     * @param venueId 场地ID（可选，为null时返回所有场地统计）
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 场地统计
     */
    Map<String, Object> getVenueStatistics(Long venueId, LocalDate startDate, LocalDate endDate);

    /**
     * 获取用户活跃度统计
     *
     * @param days 天数
     * @return 活跃度统计
     */
    Map<String, Object> getUserActivityStatistics(Integer days);

    /**
     * 获取运动类型热度统计
     *
     * @param days 天数
     * @return 热度统计
     */
    Map<String, Object> getSportTypePopularity(Integer days);

    /**
     * 获取城市活动分布统计
     *
     * @param days 天数
     * @return 城市分布统计
     */
    Map<String, Object> getCityDistribution(Integer days);

    /**
     * 获取俱乐部排行榜
     *
     * @param type 排行类型（members/events/activity）
     * @param limit 排行数量
     * @return 排行榜
     */
    Map<String, Object> getClubRankings(String type, Integer limit);

    /**
     * 获取用户排行榜
     *
     * @param type 排行类型（points/events/contributions）
     * @param limit 排行数量
     * @return 排行榜
     */
    Map<String, Object> getUserRankings(String type, Integer limit);
}

